home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -seriously_amiga- / programming / other / cyberxxxsrc / decoder / txt / yuv.h < prev   
C/C++ Source or Header  |  1999-02-08  |  3KB  |  108 lines

  1. #ifndef YUV_H
  2. #define YUV_H
  3.  
  4. #include "Decode.h"
  5.  
  6. /* /// "DecYUVRGB" */
  7. #define DecYUVRGB(ip,y,v2r,uv2g,u2b) {      \
  8.   register long yy=yTab[y];                 \
  9.   ip.alpha=0;                               \
  10.   ip.red=(uchar)(rngLimit[(yy+v2r)>>6]);    \
  11.   ip.green=(uchar)(rngLimit[(yy+uv2g)>>6]); \
  12.   ip.blue=(uchar)(rngLimit[(yy+u2b)>>6]);   \
  13. }
  14. /* \\\ */
  15.  
  16. /* /// "DecYUV332" */
  17. #define DecYUV332(ip,y,v2r,uv2g,u2b) { \
  18.   register long _r, _g, _b, yy;        \
  19.   yy=yTab[y];                          \
  20.   _r=(long)(rngLimit[(yy+v2r)>>6]);    \
  21.   _g=(long)(rngLimit[(yy+uv2g)>>6]);   \
  22.   _b=(long)(rngLimit[(yy+u2b)>>6]);    \
  23.   *ip++=RGBto332(_r,_g,_b,scale8);     \
  24. }
  25. /* \\\ */
  26.  
  27. /* /// "DecYUV332Dith" */
  28. #define DecYUV332Dith(val,y,v2r,uv2g,u2b) {             \
  29.   long _r, _g, _b, yy;                                  \
  30.   yy=yTab[y];                                           \
  31.   _r=rngLimit[((yy+v2r) >> 6)+re];                      \
  32.   _g=rngLimit[((yy+uv2g) >> 6)+ge];                     \
  33.   _b=rngLimit[((yy+u2b) >> 6)+be];                      \
  34.   yy=(_r & 0xe0) | ((_g & 0xe0)>>3) | ((_b & 0xc0)>>6); \
  35.   re=_r-pens[yy].red;                                   \
  36.   ge=_g-pens[yy].green;                                 \
  37.   be=_b-pens[yy].blue;                                  \
  38.   val=remap[yy];                                        \
  39. }
  40. /* \\\ */
  41.  
  42. /* /// "YUVtoRGB" */
  43. #define YUVtoRGB(y,cr,cg,cb,tripl) { \
  44.   long yy=yuvTab->yTab[y];           \
  45.   tripl.alpha=0;                     \
  46.   tripl.red=rngLimit[(yy+cr)>>6];    \
  47.   tripl.green=rngLimit[(yy+cg)>>6];  \
  48.   tripl.blue=rngLimit[(yy+cb)>>6];   \
  49. }
  50. /* \\\ */
  51.  
  52. /* /// "YUVto332" */
  53. #define YUVto332(y,cr,cg,cb,clr) { \
  54.   long r, g, b;                    \
  55.   long yy=yuvTab->yTab[y];         \
  56.   r=rngLimit[(yy+cr)>>6];          \
  57.   g=rngLimit[(yy+cg)>>6];          \
  58.   b=rngLimit[(yy+cb)>>6];          \
  59.   RGB24toColor(r,g,b,clr);         \
  60. }
  61. /* \\\ */
  62.  
  63. /* /// "dith2x2CGen" */
  64. #define dith2x2CGen(_cc,_Y,r,g,b,re,ge,be) { \
  65.   r=rngLimit[((_Y+cr) >> 6)+re];             \
  66.   g=rngLimit[((_Y+cg) >> 6)+ge];             \
  67.   b=rngLimit[((_Y+cb) >> 6)+be];             \
  68.   RGB24toColorNoMap(r,g,b,clr);              \
  69.   _cc=remap[clr];                            \
  70. }
  71. /* \\\ */
  72.  
  73. /* /// "dith2x2EGen" */
  74. #define dith2x2EGen(clr,r,g,b,re,ge,be) { \
  75.   re=r-pens[clr].red;                     \
  76.   ge=g-pens[clr].green;                   \
  77.   be=b-pens[clr].blue;                    \
  78. }
  79. /* \\\ */
  80.  
  81. /* /// "DitherGetRGB" */
  82. #define DitherGetRGB(r,g,b,re,ge,be,col) {                \
  83.   long r1, g1, b1;                                        \
  84.   ulong idx;                                              \
  85.   r1=(long)rngLimit[r+re];                                \
  86.   g1=(long)rngLimit[g+ge];                                \
  87.   b1=(long)rngLimit[b+be];                                \
  88.   RGB24toColorNoMap(r1,g1,b1,idx);                        \
  89.   re=r1-pens[idx].red;                                    \
  90.   ge=g1-pens[idx].green;                                  \
  91.   be=b1-pens[idx].blue;                                   \
  92.   col=remap[idx];                                         \
  93. }
  94. /* \\\ */
  95.  
  96. /* /// "iDecYUVRGB" */
  97. #define iDecYUVRGB(ip,y,v2r,uv2g,u2b) {       \
  98.   long yy=yTab[y];                            \
  99.   ip.alpha=0;                                 \
  100.   ip.red  =(uchar)(rngLimit[(yy+v2r)>>6]);    \
  101.   ip.green=(uchar)(rngLimit[(yy+uv2g)>>6]);   \
  102.   ip.blue =(uchar)(rngLimit[(yy+u2b)>>6]);    \
  103. }
  104. /* \\\ */
  105.  
  106. #endif
  107.  
  108.